package cn.xopencode.oss.dal.mysql.dataobject.permission;

import cn.xopencode.mybatis.core.dataobject.DeletableDO;
import cn.xopencode.oss.dal.mysql.dataobject.admin.AdminDO;
import cn.xopencode.oss.enums.permission.ResourceTypeEnum;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

/**
 * 资源实体
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName(value = "oss_permission_resource")
public class ResourceDO extends DeletableDO {
    /**
     * 资源编号
     */
    private String id;
    /**
     * 权限资源名
     */
    private String name;
    /**
     * 权限标识
     * 一般格式为：${服务}:${功能}:${操作}
     * 例如说：system:admin:add，即 system 服务的添加管理员。
     * 当我们把该 ResourceDO 赋予给职务后，意味着该职务有该资源：
     *      - 对于后端，配合 @RequiresPermissions 注解，配置 API 接口需要该权限，从而对 API 接口进行权限控制。
     *      - 对于前端，配合前端标签，配置按钮是否展示，避免用户没有该权限时，结果可以看到该操作。
     */
    private String permission;
    /**
     * 资源类型
     *
     * 关联 {@link ResourceTypeEnum}
     */
    private Integer resourceType;
    /**
     * 排序
     */
    private Integer sort;

    /**
     * 数据范围
     */
    private Integer dataRange;
    /**
     * 父级资源编号
     *
     * 关联：{@link ResourceDO#getId()}
     */
    private String parentId;
    /**
     * 前端路由
     *
     * 目前当且仅当资源类型为 {@link ResourceTypeEnum#MENU} 时，才会生效
     */
    private String route;
    /**
     * 菜单图标
     *
     * 目前当且仅当资源类型为 {@link ResourceTypeEnum#MENU} 时，才会生效
     */
    private String icon;
    /**
     * 前端界面
     * 例如说，vue 框架下的 component 对应的 view 页面。
     *
     * 目前当且仅当资源类型为 {@link ResourceTypeEnum#MENU} 时，才会生效
     */
    private String view;

    /**
     * 创建人编号
     *
     */
    private String creatorId;

}
